package com.company.composite;

/**
 * 抽象组件角色，组合对象，即根节点
 */
public abstract class Component {

    /**
     * 组件的通用名字
     */
    private String name = "";


    public Component(String name) {
        this.name = name;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    /**
     * 展示组件名字
     * @param str
     */
    public abstract void display(String str);

    /**
     * 添加组件对象
     * @param child
     */
    public void addChild(Component child) {
        // 缺省的实现，抛出异常，因为叶子对象没有这个功能，或子类未实现这个功能
        throw new UnsupportedOperationException("对象不支持此功能");
    }

    /**
     * 删除组件对象
     * @param child
     */
    public void removeChild(Component child) {
        // 缺省的实现，抛出异常，因为叶子对象没有这个功能，或子类未实现这个功能
        throw new UnsupportedOperationException("对象不支持此功能");
    }

    /**
     * 根据索引获取组合对象中对应的组件对象
     * @param index
     * @return
     */
    public Component getChildren(int index) {
        // 缺省的实现，抛出异常，因为叶子对象没有这个功能，或子类未实现这个功能
        throw new UnsupportedOperationException("对象不支持此功能");
    }
}
